package com.sh.data.engine.application.model.request.dataquality;

import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.hibernate.validator.constraints.Length;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

/**
 * @author tinglan.ys
 * @description:
 * @date 2022/2/18 上午11:42
 */
@Data
@Schema
public class DataQualityRuleRequest {

    protected Long id;

    /**
     * 分区表达式id 离线任务那里直接存的是partitionExpression 注意区别
     */
    @NotNull(message = "分区表达式id不能为空")
    private Long partitionId;

    /**
     * 规则名称
     */
    @NotBlank(message = "规则名称不能为空")
    @Length(min = 2, max = 32, message = "规则名称长度为2-32个字符")
    @Pattern(regexp = "[a-zA-Z0-9_\\u4e00-\\u9fa5]+", message = "规则名称仅支持中文、字母、数字、下划线")
    private String ruleName;

    /**
     * 表id
     */
    @NotNull(message = "tblId")
    private Long tblId;

    /**
     * 表名
     */
    @NotBlank(message = "表名不能为空")
    private String tblName;

    /**
     * 字段名，多个字段名用逗号隔开
     */
    // @NotBlank(message = "字段名不能为空")
    private String fieldNames;

    /**
     * 字段类型，多个字段名用逗号隔开
     */
    // @NotBlank(message = "字段类型不能为空")
    private String fieldTypes;

    /**
     * 规则强度 0-强 1-弱
     */
    @NotNull(message = "请选择规则强度")
    private Integer ruleStrength;

    /**
     * 规则来源 0-内置模版规则 1-标准模版规则
     */
    private Integer ruleFrom;

    /**
     * 规则类型 0-字段级规则 1-表级规则
     */
    private Integer ruleType;

    /**
     * 规则模版id
     */
    private Long templateId;

    // 多个对象这么存
    // [{"key":"min","placeholder":"请输入最小值","dataType":"number","value":"1"},{"key":"max","placeholder":"请输入最大值","dataType":"number","value":"10"}]
    @Schema(description = "规则判断条件，json格式，对于长度约束和取值范围约束，value用逗号隔开")
    private String ruleCondition;

    @Schema(
        description = "比较方式 0-大于 1-大于等于 2-等于 3-小于 4-小于等于 5-不等于 6-属于 7-不属于，对于长度约束和取值范围约束，多个值用逗号隔开")
    private String ruleCompareType;

    /**
     * 期望值
     */
    private String ruleExpectValue;

    /**
     * 是否是自定义规则 0-否 1-是
     */
    @NotNull(message = "规则分类不能为空")
    private Integer ruleDiy;

    /**
     * 统计方式 count sum max min avg
     */
    private String ruleDiyStatisticalModel;

    /**
     * 描述
     */
    @Length(max = 128, message = "描述最多128个字符")
    private String remark;

    /**
     * 规则模版名字 为了省去一步表连接存的时候就存进去
     */
    private String templateName;

    /**
     * 过滤条件
     */
    private String templateFilter;

    /**
     * diySql
     */
    private String diySql;
}
